﻿#ifndef __AF_EVENT_H__
#define __AF_EVENT_H__

#include "AF_Define.h"

namespace AF
{
	struct Event;
}
typedef AF::Event			AF_SEvent;

namespace AF
{
	/// 系统事件枚举
	enum EventType
	{
		/// 无事件
		EVENT_NOTHING		= 0,
		// 窗口事件
		/// 窗口事件标示
		EVENT_WINDOW		= 10,

		// 命令事件
		/// 命令事件标示
		EVENT_COMMAND		= 20,
		/// 键盘按下事件
		EVENT_KEYBOARD_DOWN,
		/// 键盘抬起事件
		EVENT_KEYBOARD_UP,
		/// 鼠标移动事件
		EVENT_MOUSE_MOVE,
		/// 鼠标左键按下事件
		EVENT_MOUSE_LEFT_DOWN,
		/// 鼠标左键抬起事件
		EVENT_MOUSE_LEFT_UP,
		/// 鼠标右键按下事件
		EVENT_MOUSE_RIGHT_DOWN,
		/// 鼠标右键抬起事件
		EVENT_MOUSE_RIGHT_UP,

		/// 事件定义结尾标示
		EVENT_END
	};
}
typedef AF::EventType			AF_EEventType;
#define AF_EVENT_NOTHING		AF::EVENT_NOTHING
#define AF_EVENT_WINDOW			AF::EVENT_WINDOW
#define AF_EVENT_COMMAND		AF::EVENT_COMMAND
#define AF_EVENT_KEYBOARD_DOWN		AF::EVENT_KEYBOARD_DOWN
#define AF_EVENT_KEYBOARD_UP		AF::EVENT_KEYBOARD_UP
#define AF_EVENT_MOUSE_MOVE		AF::EVENT_MOUSE_MOVE
#define AF_EVENT_MOUSE_LEFT_DOWN	AF::EVENT_MOUSE_LEFT_DOWN
#define AF_EVENT_MOUSE_LEFT_UP		AF::EVENT_MOUSE_LEFT_UP
#define AF_EVENT_MOUSE_RIGHT_DOWN	AF::EVENT_MOUSE_RIGHT_DOWN
#define AF_EVENT_MOUSE_RIGHT_UP		AF::EVENT_MOUSE_RIGHT_UP
#define AF_EVENT_END			AF::EVENT_END

/// 判定是否为窗口事件
#define AF_EVENT_ISWINDOW(_nEventID)	((_nEventID) > AF_EVENT_WINDOW && (_nEventID) < AF_EVENT_COMMAND)
/// 判定是否为命令事件
#define AF_EVENT_ISCOMMAND(_nEventID)	((_nEventID) > AF_EVENT_COMMAND && (_nEventID) < AF_EVENT_END)


namespace AF
{
	/// 系统事件结构
	struct Event
	{
	public:
		/// 系统事件编号
		UINT			nMessage;
		/// 事件参数1
		long			lParam1;
		/// 事件参数2
		long			lParam2;

		Event()
		{
			Reset();
		}

		/// 重置结构体
		void Reset()
		{
			nMessage	= EVENT_NOTHING;
			lParam1		= NULL;
			lParam2		= NULL;
		}
	};
}

#endif